import asyncio
from typing import Callable, Any, TypeVar, Awaitable

import logging
from log_config import setup_logging

setup_logging()
logger = logging.getLogger(__name__)

T = TypeVar('T')


def run_in_thread_pool(
    thread_pool: Any,
    func: Callable[..., T],
    *args: Any,
    **kwargs: Any
) -> Awaitable[T]:
    """
    在线程池中执行同步函数的辅助函数，避免阻塞事件循环
    
    Args:
        thread_pool: 线程池实例
        func: 要执行的同步函数
        *args: 传递给函数的位置参数
        **kwargs: 传递给函数的关键字参数
        
    Returns:
        Awaitable[T]: 包含函数执行结果的协程对象
        
    Raises:
        任何func可能抛出的异常，会被包装后重新抛出
    """
    # 获取当前事件循环
    loop = asyncio.get_event_loop()
    
    # 记录执行信息，便于调试和性能分析
    func_name = getattr(func, '__name__', str(func))
    logger.debug(f"开始在线程池中执行函数: {func_name}")
    
    # 在线程池中运行同步函数
    return loop.run_in_executor(thread_pool, func, *args, **kwargs)